The electronic industry has reached a point at which the dependencies between software and hardware have become so significant that they must be designed, integrated and debugged together. Efficient debug at the hardware/software interface requires complete understanding of various things, such as what is happening in the processor, the device registers, memory maps, bus accesses that connect the processor to the peripherals, operating system being used, and device drivers. This kind of debugging capability has become crucial for delivering products successfully, at the right time, and at appropriate cost points.
The issue with debugging of the system where hardware and software are integrated and software expects some data from the hardware via some form of communication involves hand-shaking mechanism for the data transaction. If there is any failure in the data transaction, then the debugger has to identify the root cause of this problem which could be either in the software or in the hardware and provide a respective solution.
In one conventional approach, the debugging of the software may be carried out first. In case there is no problem with the software, then the debugging of the hardware is carried out to identify the problem as hardware and thereafter the problem is fixed. Such conventional approach involves lot of resources, time and investment for debugging the system.
Debugging the hardware/software becomes a necessity for delivering quality systems and meeting production goals. So it is desirable to identify the underlying problem as software or hardware before debugging so that the resource can concentrate on the exact issue without being deviated.
The issue mainly faced in detecting root cause for hardware failure and software failure is performing protocol level transactions between the one or more components in a system such that the exact issue is identified before performing the debugging process.